export default () => (): void => {};

export default () => function (): void {};  

export default () => { 
  return (): void => {};
};

export default () => { 
  return function (): void {};
};

export function fn() {
  return (): void => {};
};

export function fn() { 
  return function (): void {};
};

export function FunctionDeclaration() {  
  return function FunctionExpression_Within_FunctionDeclaration() {
    return function FunctionExpression_Within_FunctionExpression() {
      return () => {
        // ArrowFunctionExpression_Within_FunctionExpression
        return () => 
        // ArrowFunctionExpression_Within_ArrowFunctionExpression
        (): number =>
        1; // ArrowFunctionExpression_Within_ArrowFunctionExpression_WithNoBody
      };
    };
  };
};

export default () => () => {
  return (): void => {
    return;
  };
};

export class Accumulator {
  private count: number = 0;

  public accumulate(fn: () => number): void {
    this.count += fn();
  }
}
new Accumulator().accumulate(() => 1);

export function foo(outer: string) { 
  return function (inner: string): void {};
};

  export function a() {
  return function b(): () => void {
    return function c() {};
  };
};